<?php

/*
 * 此文件是 jwt-auth 的一部分。
 *
 * (c) Sean Tymon <tymon148@gmail.com>
 *
 * 有关完整的版权和许可信息，请查看分发此源代码的 LICENSE 文件。
 */

return [

    /*
    |--------------------------------------------------------------------------
    | JWT 认证密钥
    |--------------------------------------------------------------------------
    |
    | 不要忘记在 .env 文件中设置此项，因为它将用于签署
    | 你的令牌。提供了一个帮助命令：
    | `php artisan jwt:secret`
    |
    | 注意：这将仅用于对称算法（HMAC），
    | 因为 RSA 和 ECDSA 使用的是私钥/公钥组合（见下文）。
    |
    */

    'secret' => env('JWT_SECRET'),

    /*
    |--------------------------------------------------------------------------
    | JWT 认证密钥
    |--------------------------------------------------------------------------
    |
    | 你使用的算法将决定你的令牌是
    | 使用随机字符串（在 `JWT_SECRET` 中定义）签名，还是使用以下公钥和私钥。
    |
    | 对称算法：
    | HS256、HS384 和 HS512 将使用 `JWT_SECRET`。
    |
    | 非对称算法：
    | RS256、RS384 和 RS512 / ES256、ES384 和 ES512 将使用下面的密钥。
    |
    */

    'keys' => [

        /*
        |--------------------------------------------------------------------------
        | 公钥
        |--------------------------------------------------------------------------
        |
        | 公钥的路径或资源。
        |
        | 例如：'file://path/to/public/key'
        |
        */

        'public' => env('JWT_PUBLIC_KEY'),

        /*
        |--------------------------------------------------------------------------
        | 私钥
        |--------------------------------------------------------------------------
        |
        | 私钥的路径或资源。
        |
        | 例如：'file://path/to/private/key'
        |
        */

        'private' => env('JWT_PRIVATE_KEY'),

        /*
        |--------------------------------------------------------------------------
        | 密码短语
        |--------------------------------------------------------------------------
        |
        | 私钥的密码短语。如果没有设置，则可以为 null。
        |
        */

        'passphrase' => env('JWT_PASSPHRASE'),

    ],

    /*
    |--------------------------------------------------------------------------
    | JWT 有效时间
    |--------------------------------------------------------------------------
    |
    | 指定令牌的有效时间（以分钟为单位）。
    | 默认值为 1 小时。
    |
    | 你也可以将其设置为 null，以生成一个永不过期的令牌。
    | 有些人可能希望这种行为，例如移动应用程序。
    | 这并不是特别推荐，因此请确保你有适当的系统来撤销令牌（如果必要）。
    | 注意：如果你将其设置为 null，则应从 'required_claims' 列表中删除 'exp' 元素。
    |
    */

    'ttl' => env('JWT_TTL', 60),

    /*
    |--------------------------------------------------------------------------
    | 刷新有效时间
    |--------------------------------------------------------------------------
    |
    | 指定令牌可以在多长时间内被刷新（以分钟为单位）。
    | 即：用户可以在原始令牌创建后的 2 周内刷新他们的令牌，直到他们必须重新认证。
    | 默认值为 2 周。
    |
    | 你也可以将其设置为 null，以生成无限的刷新时间。
    | 有些人可能希望这样，而不是永不过期的令牌，例如移动应用程序。
    | 这并不是特别推荐，因此请确保你有适当的系统来撤销令牌（如果必要）。
    |
    | 本系统并没有使用 jwt 生成刷新令牌，而是使用一个独立的刷新令牌。
    | 所以 此设置没有使用。
    |
    */

    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),

    /*
    |--------------------------------------------------------------------------
    | JWT 哈希算法
    |--------------------------------------------------------------------------
    |
    | 指定将用于签署令牌的哈希算法。
    |
    */

    'algo' => env('JWT_ALGO', Tymon\JWTAuth\Providers\JWT\Provider::ALGO_HS256),

    /*
    |--------------------------------------------------------------------------
    | 必需声明
    |--------------------------------------------------------------------------
    |
    | 指定必须存在于任何令牌中的必需声明。
    | 如果这些声明中的任何一个在有效负载中不存在，将抛出 TokenInvalidException。
    |
    */

    'required_claims' => [
        'iss',
        'iat',
        'exp',
        'nbf',
        'sub',
        'jti',
    ],

    /*
    |--------------------------------------------------------------------------
    | 持久声明
    |--------------------------------------------------------------------------
    |
    | 指定在刷新令牌时要持久化的声明键。
    | `sub` 和 `iat` 将自动被持久化，除了这些声明。
    |
    | 注意：如果声明不存在，则将被忽略。
    |
    */

    'persistent_claims' => [
        'token_version',
    ],

    /*
    |--------------------------------------------------------------------------
    | 锁定主题
    |--------------------------------------------------------------------------
    |
    | 这将决定是否自动将 `prv` 声明添加到令牌中。
    | 这样做的目的是确保如果你有多个
    | 认证模型，例如 `App\User` 和 `App\OtherPerson`，那么我们
    | 应该防止一个认证请求冒充另一个请求，
    | 如果两个令牌在两个不同模型中恰好具有相同的 ID。
    |
    | 在特定情况下，你可能希望禁用此行为
    | 例如，如果你只有一个认证模型，那么你将节省
    | 一些令牌大小。
    |
    */

    'lock_subject' => true,

    /*
    |--------------------------------------------------------------------------
    | 宽限期
    |--------------------------------------------------------------------------
    |
    | 此属性为 jwt 时间戳声明提供了一些"宽限期"。
    | 意味着如果你的任何服务器上有不可避免的轻微时钟偏差，
    | 那么这将为你提供一定程度的缓冲。
    |
    | 这适用于声明 `iat`、`nbf` 和 `exp`。
    |
    | 以秒为单位指定 - 仅在你知道需要时。
    |
    */

    'leeway' => env('JWT_LEEWAY', 60),

    /*
    |--------------------------------------------------------------------------
    | 黑名单启用
    |--------------------------------------------------------------------------
    |
    | 为了使令牌失效，你必须启用黑名单。
    | 如果你不想或不需要此功能，则将其设置为 false。
    |
    */

    'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),

    /*
    | -------------------------------------------------------------------------
    | 黑名单宽限期
    | -------------------------------------------------------------------------
    |
    | 当使用相同的 JWT 进行多个并发请求时，
    | 可能会由于每个请求上的令牌再生而导致某些请求失败。
    |
    | 设置宽限期（以秒为单位）以防止并行请求失败。
    |
    */

    'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 30),

    /*
    |--------------------------------------------------------------------------
    | Cookies 加密
    |--------------------------------------------------------------------------
    |
    | 默认情况下，Laravel 为安全原因加密 cookies。
    | 如果你决定不解密 cookies，则必须配置 Laravel
    | 以不加密你的 cookie 令牌，通过将其名称添加到中间件 "EncryptCookies"
    | 提供的 $except 数组中。
    | 详情请参见 https://laravel.com/docs/master/responses#cookies-and-encryption。
    |
    | 如果你想解密 cookies，则将其设置为 true。
    |
    */

    'decrypt_cookies' => false,

    /*
    |--------------------------------------------------------------------------
    | 提供者
    |--------------------------------------------------------------------------
    |
    | 指定在整个包中使用的各种提供者。
    |
    */

    'providers' => [

        /*
        |--------------------------------------------------------------------------
        | JWT 提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于创建和解码令牌的提供者。
        |
        */

        'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,

        /*
        |--------------------------------------------------------------------------
        | 认证提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于认证用户的提供者。
        |
        */

        'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,

        /*
        |--------------------------------------------------------------------------
        | 存储提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于在黑名单中存储令牌的提供者。
        |
        */

        'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,

    ],

];
